/**
 * JGeneratorFrame.java
 * 2011-11-20 上午11:45:05
 */
package xgenerator.ui.swing;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.io.InputStream;
import java.util.Properties;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;

import xgenerator.service.MetadataService;
import xgenerator.service.impl.MetadataServiceImpl;
import xgenerator.ui.swing.adapter.DataSourceAdapter;
import xgenerator.ui.swing.adapter.GenerateAdapter;
import xgenerator.ui.swing.adapter.MetadataAdapter;
import xgenerator.ui.swing.adapter.MetadataFileAdapter;
import xgenerator.ui.swing.model.AppFrameworkComboBoxModel;
import xgenerator.ui.swing.model.DatasourceComboBoxModel;
import xgenerator.ui.swing.model.EncodingComboBoxModel;
import xgenerator.ui.swing.model.MetadataTableModel;
import xgenerator.ui.swing.model.PersistenceFrameworkComboBoxModel;
import xgenerator.ui.swing.model.RiaComboBoxModel;
import xgenerator.ui.swing.model.ViewComboBoxModel;
import xgenerator.ui.swing.model.WebFrameworkComboBoxModel;
import xgenerator.util.ResourceUtils;

/**
 * <p>
 * Title:类的中文名
 * </p>
 * <p>
 * Description:具体功能见各方法描述
 * </p>
 * <p>
 * Copyright:Copyright (c) 2011
 * </p>
 * 
 * @author <a href="mailto:lishushan@gmail.com">liss</a>
 * @version 1.0
 */
@SuppressWarnings("serial")
public class JGeneratorFrame extends JFrame implements UIConstants {
	
	/**
	 * 静态
	 */
	private static final Properties properties = new Properties();
	static {
		try {
			InputStream is = ResourceUtils.getClasspathResourceAsStream(SWING_UI_PATH + "generator.properties");
			properties.load(is);
		} catch (Exception ignore) {
		}
	}
	
	public static final String DEFAULT_TABLE_SUFFIX = properties.getProperty("default.table.suffix");
	
	public static final String DEFAULT_PROJECT_LOCATION = properties.getProperty("default.project.location");
	
	public static final String DEFAULT_SOURCE_FOLDER = properties.getProperty("default.source.folder");
	public static final String DEFAULT_CONFIG_FOLDER = properties.getProperty("default.config.folder");
	public static final String DEFAULT_RESOURCES_FOLDER = properties.getProperty("default.resources.folder");
	public static final String DEFAULT_APP_PACKAGE = properties.getProperty("default.app.package");
	public static final String DEFAULT_SUBSYSTEM_PACKAGE = properties.getProperty("default.subsystem.package");
	public static final String DEFAULT_MODULE_PACKAGE = properties.getProperty("default.module.package");
	
	public static final String DEFAULT_WEB_ROOT_FOLDER = properties.getProperty("default.web.root.folder");
	public static final String DEFAULT_WEB_RESOURCES_FOLDER = properties.getProperty("default.web.resources.folder");
	public static final String DEFAULT_WEB_CONFIG_FOLDER = properties.getProperty("default.web.config.folder");
	
	public static final String ACTION_SUFFER = properties.getProperty("custom.actionSuffer");
	public static final String ACTION_FORM_SUFFER = properties.getProperty("custom.actionFormSuffer");
	public static final String SERVICE_SUFFER = properties.getProperty("custom.serviceSuffer");
	public static final String SERVICE_IMPL_SUFFER = properties.getProperty("custom.serviceImplSuffer");
	public static final String DAO_SUFFER = properties.getProperty("custom.daoSuffer");
	public static final String DAO_IMPL_SUFFER = properties.getProperty("custom.daoImplSuffer");
	public static final String METADATA_SUFFER = properties.getProperty("custom.metadataSuffer");
	
	public static final String QUERY_PREFIX = properties.getProperty("custom.queryPrefix");
	public static final String CREATE_PREFIX = properties.getProperty("custom.createPrefix");
	public static final String EDIT_PREFIX = properties.getProperty("custom.editPrefix");
	public static final String VIEW_PREFIX = properties.getProperty("custom.viewPrefix");
	public static final String GRID_PAGE_SUFFER = properties.getProperty("custom.gridSuffer");
	public static final String TREE_PAGE_SUFFER = properties.getProperty("custom.treeSuffer");
	
	public static final String WINDOW_SUFFER = properties.getProperty("custom.windowSuffer");
	public static final String PANEL_SUFFER = properties.getProperty("custom.panelSuffer");
	public static final String GRID_PANEL_SUFFER = properties.getProperty("custom.gridPanelSuffer");
	public static final String TREE_PANEL_SUFFER = properties.getProperty("custom.treePanelSuffer");
	
	/*
	 * service
	 */
	private MetadataService metadataService;

	/*
	 * 查询、加载元数据
	 */
	private JComboBox dataSourceComboBox;
	private JButton dataSourceManagerBtn;
	private JComboBox tableComboBox;
	private JTextField filterTableNamePrefixField;  //表名过滤前缀
	private JTextField filterTableNameSufferField;  //表名过滤后缀
	private JTextField filterColumnNamePrefixField;  //列名过滤前缀
	private JButton queryBtn;
	private JButton metadataFileBtn;
	
	/*
	 * 元数据table
	 */
	private MetadataTable metadataTable;
	
	/*
	 * 元数据基本信息
	 */
	private JTextField metadataModelNameField;  //元数据模型名称
	private JTextField modelDescriptionField;  //模型描述
	private JComboBox encodingComboBox;
	
	/*
	 * JavaEE规范选择
	 */
	private ButtonGroup j2eeSpecificationLevelButtonGroup;

	/*
	 * 技术架构
	 * web层=表示层(view)+控制层(controller)
	 */
	private JComboBox viewComboBox; // 表示层技术选择
	private JComboBox webFrameworkComboBox; // web框架类型选择
	private JComboBox appFrameworkComboBox; // 业务层框架类型选择
	private JComboBox persistenceFrameworkComboBox; // 持久层框架类型选择
	private JComboBox riaComboBox; // 富客户技术选择

	/*
	 * 项目设置
	 */
	private JTextField projectLocationField;
	private JButton projectLocationSelectBtn; // 项目位置选择按钮
	private JTextField srcField;
	private JTextField appConfigField;
	private JTextField appResourcesField;
	private JTextField webRootField;
	private JTextField webConfigField;
	private JTextField webResourcesField;
	
	/*
	 * 命名法选择
	 */
	private ButtonGroup notationButtonGroup;
	
	/*
	 * 个性化设置
	 */
	private JTextField packagePrefixField;
	private JTextField subsystemField;
	private JTextField moduleField;
	private JTextField javaModelNameField;  //java模型名称
	
	private JTextField actionSuffer;
	private JTextField actionFormSuffer;
	private JTextField serviceSuffer;
	private JTextField serviceImplSuffer;
	private JTextField daoSuffer;
	private JTextField daoImplSuffer;
	private JTextField metadataSuffer;
	
	private JTextField queryPrefix;
	private JTextField createPrefix;
	private JTextField editPrefix;
	private JTextField viewPrefix;
	private JTextField gridSuffer;
	private JTextField treeSuffer;
	
	private JTextField windowSuffer;
	private JTextField panelSuffer;
	private JTextField gridPanelSuffer;
	private JTextField treePanelSuffer;
	
	/*
	 * 代码生成选项
	 */
	private JCheckBox viewCodeGenerateCheckBox; // 是否生成表示层代码
	private JCheckBox controllerCodeGenerateCheckBox; // 是否生成控制层代码
	private JCheckBox appCodeGenerateCheckBox; // 是否生成业务层代码
	private JCheckBox persistenceCodeGenerateCheckBox; // 是否生成持久层代码
	private JCheckBox riaCodeGenerateCheckBox; // 是否生成RIA代码
	private JTextField pageStyle;  //页面样式
	private JButton pageStyleSelectBtn;  //样式选择
	private JButton codeGenerateBtn;  //代码生成
	
	private JLabel statusLabel;

	/**
	 * constructor
	 */
	public JGeneratorFrame() {
		super();
		metadataService = new MetadataServiceImpl();
		initComponents();
		setFaceFeature();
	}

	/**
	 * <p>
	 * Title：初始化组件
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 */
	private void initComponents() {
		/** Configuration des composants * */
		this.setContentPane(buildContentPane());
	}
	
	/**
	 * <p>
	 * Title：设置显示特性
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 */
	private void setFaceFeature() {
		this.setTitle("XGenerator");
		this.setIconImage(IconUtils.createIconImage(APP_ICON_IMAGE));

		Toolkit tk = Toolkit.getDefaultToolkit();
		Dimension screenSize = tk.getScreenSize();
		int screenHeight = screenSize.height;
		int screenWidth = screenSize.width;
		// this.setSize(screenWidth / 2, screenHeight / 2);
		// this.setSize(900, 600);
		//this.setSize(screenWidth, screenHeight - 30);
		this.setSize(screenWidth-250, screenHeight - 330);
		pack();
		this.setMinimumSize(new Dimension(800, 600));
		this.setMaximumSize(new Dimension(screenWidth, screenHeight - 30));
		this.setLocation((screenWidth - getWidth()) / 2, (screenHeight - getHeight() - 30) / 2);
		// this.setResizable(false); //
		//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setVisible(true);
	}
	
	/**
	 * <p>
	 * Title：构造northPanel
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JPanel buildNorthPane() {
		JPanel northPanel = new JPanel();
		northPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

		JLabel datasourceLabel = new JLabel("数据源:");
		datasourceLabel.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "database.png"));
		northPanel.add(datasourceLabel);

		this.dataSourceManagerBtn = new JButton(new DataSourceAdapter(this));
		this.dataSourceManagerBtn.setPreferredSize(new Dimension(30, 30));
		this.dataSourceManagerBtn.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "add.gif"));
		this.dataSourceManagerBtn.setActionCommand(DataSourceAdapter.MANAGER_DATASOURCES_COMMAND);
		northPanel.add(this.dataSourceManagerBtn);
		
		this.dataSourceComboBox = new JComboBox(new DatasourceComboBoxModel());
		this.dataSourceComboBox.setPreferredSize(new Dimension(150, 29));
		this.dataSourceComboBox.addPopupMenuListener(new PopupMenuListener() {// 界面初始化时列表为空，触发下拉列表时，加载数据
			public void popupMenuCanceled(PopupMenuEvent e) {
			}

			public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
			}

			public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
				DatasourceComboBoxModel datasourceComboBoxModel = (DatasourceComboBoxModel) dataSourceComboBox.getModel();
				datasourceComboBoxModel.loadData();
			}
		});
		
		/*
		this.datasourceComboBox.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if (e.getStateChange() == ItemEvent.SELECTED) {
					Object selectedItem = e.getItem();
					String datasourceName = null != selectedItem ? selectedItem.toString() : null;
					System.out.println(datasourceName);
					if (null != datasourceName && !"".equals(datasourceName)) {
						MetadataTableModel metadataTableModel = (MetadataTableModel) metadataTable.getModel();
						metadataTableModel.updateDataVector(datasourceName, null);

						metadataTable.setPreferredTableColumnStyle();
						metadataTable.revalidate();
						metadataTable.updateUI();
					}
				}
			}
		});
		*/
		northPanel.add(this.dataSourceComboBox);
		
		JLabel tableLabel = new JLabel("表:");
		tableLabel.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "database_table.png"));
		northPanel.add(tableLabel);
		this.tableComboBox = new JComboBox(new DefaultComboBoxModel());
		this.tableComboBox.setPreferredSize(new Dimension(150, 29));
		this.tableComboBox.addPopupMenuListener(new PopupMenuListener() {
			public void popupMenuCanceled(PopupMenuEvent e) {
			}

			public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
			}

			public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
				try {
					Object selectedItem = dataSourceComboBox.getSelectedItem();
					String datasourceName = null != selectedItem ? selectedItem.toString() : null;
					
					Vector dataVector = metadataService.getTables(datasourceName);
					
					tableComboBox.setModel(new DefaultComboBoxModel(dataVector));
				} catch (Exception ex) {
					JOptionPane.showMessageDialog(null, ex.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
					ex.printStackTrace();
				}
			}
		});
		
		/*
		this.tableComboBox.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if (e.getStateChange() == ItemEvent.SELECTED) {
					Object selectedItem = e.getItem();
					String tableName = null != selectedItem ? selectedItem.toString() : null;
					System.out.println(tableName);
					if (null != tableName && !"".equals(tableName)) {
						Object datasourceNameObj = dataSourceComboBox.getSelectedItem();
						String datasourceName = null != datasourceNameObj ? datasourceNameObj.toString() : null;
						System.out.println(datasourceName);
						
						MetadataTableModel metadataTableModel = (MetadataTableModel) metadataTable.getModel();
						metadataTableModel.updateDataVector(datasourceName, tableName);

						metadataTable.setPreferredTableColumnStyle();
						metadataTable.revalidate();
						metadataTable.updateUI();
					}
				}
			}
		});
		*/
		
		northPanel.add(this.tableComboBox);
		
		northPanel.add(new JLabel("过滤表名前缀:"));
		this.filterTableNamePrefixField = new JTextField();
		this.filterTableNamePrefixField.setPreferredSize(new Dimension(50, 29));
		northPanel.add(this.filterTableNamePrefixField);
		
		northPanel.add(new JLabel("过滤表名后缀:"));
		this.filterTableNameSufferField = new JTextField(DEFAULT_TABLE_SUFFIX);
		this.filterTableNameSufferField.setPreferredSize(new Dimension(30, 29));
		northPanel.add(this.filterTableNameSufferField);
		
//		northPanel.add(new JLabel("列名过滤前缀:"));
//		this.filterColumnNamePrefixField = new JTextField();
//		this.filterColumnNamePrefixField.setPreferredSize(new Dimension(50, 29));
//		northPanel.add(this.filterColumnNamePrefixField);

		this.queryBtn = new JButton(new MetadataAdapter(this));
		this.queryBtn.setPreferredSize(new Dimension(80, 30));
		this.queryBtn.setText("查询");
		this.queryBtn.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "query.png"));
		this.queryBtn.setActionCommand(MetadataAdapter.QUERY_METADATA_COMMAND);
		northPanel.add(this.queryBtn);
		
		this.metadataFileBtn = new JButton(new MetadataFileAdapter(this));
		this.metadataFileBtn.setPreferredSize(new Dimension(115, 30));
		this.metadataFileBtn.setText("元数据文件");
		this.metadataFileBtn.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "meta.png"));
		this.metadataFileBtn.setActionCommand(MetadataFileAdapter.NEW_DIALOG_COMMAND);
		northPanel.add(this.metadataFileBtn);

		return northPanel;
	}
	
	/**
	 * <p>
	 * Title：构造代码基本信息Panel
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JPanel buildMetadataInfoPane() {
		JPanel metadataInfoPanel = new JPanel();
		metadataInfoPanel.setBorder(BorderFactory.createTitledBorder("基本信息"));
		metadataInfoPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

		metadataInfoPanel.add(new JLabel("元数据模型:"));
		this.metadataModelNameField = new JTextField();
		this.metadataModelNameField.setPreferredSize(new Dimension(120, 20));
		this.metadataModelNameField.setEnabled(false);
		metadataInfoPanel.add(this.metadataModelNameField);
		
		metadataInfoPanel.add(new JLabel("模型描述:"));
		this.modelDescriptionField = new JTextField();
		this.modelDescriptionField.setPreferredSize(new Dimension(200, 20));
		metadataInfoPanel.add(this.modelDescriptionField);
		
		metadataInfoPanel.add(new JLabel("编码:"));
		this.encodingComboBox = new JComboBox(new EncodingComboBoxModel());
		metadataInfoPanel.add(this.encodingComboBox);
		
		return metadataInfoPanel;
	}
	
	/**
	 * <p>
	 * Title：构造J2EE规范级别Panel
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JPanel buildJ2eeSpecificationLevelPane() {
		JPanel j2eeSpecificationLevelPanel = new JPanel();
		j2eeSpecificationLevelPanel.setBorder(BorderFactory.createTitledBorder("J2EE规范级别"));
		j2eeSpecificationLevelPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		JRadioButton j2eeSpecificationLevel13Radio = new JRadioButton("J2EE 1.3");
		JRadioButton j2eeSpecificationLevel14Radio = new JRadioButton("J2EE 1.4");
		JRadioButton j2eeSpecificationLevel50Radio = new JRadioButton("JavaEE 5.0");
		JRadioButton j2eeSpecificationLevel60Radio = new JRadioButton("JavaEE 6.0");
		j2eeSpecificationLevel14Radio.setSelected(true);
		
		j2eeSpecificationLevel13Radio.setActionCommand("J2EE 1.3");
		j2eeSpecificationLevel14Radio.setActionCommand("J2EE 1.4");
		j2eeSpecificationLevel50Radio.setActionCommand("JavaEE 5.0");
		j2eeSpecificationLevel60Radio.setActionCommand("JavaEE 6.0");
		
		this.j2eeSpecificationLevelButtonGroup = new ButtonGroup();
		this.j2eeSpecificationLevelButtonGroup.add(j2eeSpecificationLevel13Radio);
		this.j2eeSpecificationLevelButtonGroup.add(j2eeSpecificationLevel14Radio);
		this.j2eeSpecificationLevelButtonGroup.add(j2eeSpecificationLevel50Radio);
		this.j2eeSpecificationLevelButtonGroup.add(j2eeSpecificationLevel60Radio);
		
		j2eeSpecificationLevelPanel.add(j2eeSpecificationLevel13Radio);
		j2eeSpecificationLevelPanel.add(j2eeSpecificationLevel14Radio);
		j2eeSpecificationLevelPanel.add(j2eeSpecificationLevel50Radio);
		j2eeSpecificationLevelPanel.add(j2eeSpecificationLevel60Radio);
		
		return j2eeSpecificationLevelPanel;
	}
	
	/**
	 * <p>
	 * Title：构造框架组合Panel
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JPanel buildFrameworkPane() {
		JPanel frameworkPanel = new JPanel();
		frameworkPanel.setBorder(BorderFactory.createTitledBorder("技术架构"));
		//frameworkPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0));
		frameworkPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		frameworkPanel.add(new JLabel("视图:"));
		this.viewComboBox = new JComboBox(new ViewComboBoxModel());
		frameworkPanel.add(this.viewComboBox);
		
		frameworkPanel.add(new JLabel("web框架:"));
		this.webFrameworkComboBox = new JComboBox(new WebFrameworkComboBoxModel());
		frameworkPanel.add(this.webFrameworkComboBox);

		frameworkPanel.add(new JLabel("应用框架:"));
		this.appFrameworkComboBox = new JComboBox(new AppFrameworkComboBoxModel());
		frameworkPanel.add(this.appFrameworkComboBox);

		frameworkPanel.add(new JLabel("持久层技术:"));
		this.persistenceFrameworkComboBox = new JComboBox(new PersistenceFrameworkComboBoxModel());
		frameworkPanel.add(this.persistenceFrameworkComboBox);

		frameworkPanel.add(new JLabel("RIA:"));
		this.riaComboBox = new JComboBox(new RiaComboBoxModel());
		frameworkPanel.add(this.riaComboBox);
		
		return frameworkPanel;
	}
	
	/**
	 * <p>
	 * Title：构造项目设置Panel
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JPanel buildProjectPane() {
		JPanel projectPanel = new JPanel();
		projectPanel.setBorder(BorderFactory.createTitledBorder("项目设置"));
//		projectPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 3, 5));
		projectPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
//		projectPanel.setLayout(new GridBagLayout());
		
		projectPanel.add(new JLabel("项目:"));
		this.projectLocationField = new JTextField(DEFAULT_PROJECT_LOCATION);
		this.projectLocationField.setPreferredSize(new Dimension(90, 20));
		this.projectLocationField.setEditable(false);
		projectPanel.add(this.projectLocationField);

		this.projectLocationSelectBtn = new JButton();
		this.projectLocationSelectBtn.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "open_folder.png"));
		this.projectLocationSelectBtn.setPreferredSize(new Dimension(25, 20));
		this.projectLocationSelectBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFileChooser chooser = new JFileChooser();
				chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
				// chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
				chooser.setCurrentDirectory(new File(DEFAULT_PROJECT_LOCATION));

				int returnVal = chooser.showOpenDialog(null);
				if (returnVal == JFileChooser.APPROVE_OPTION) {
					File selectFile = chooser.getSelectedFile();
					projectLocationField.setText(selectFile.getAbsolutePath());
				}
			}
		});
		projectPanel.add(this.projectLocationSelectBtn);

		projectPanel.add(new JLabel("src:"));
		this.srcField = new JTextField(DEFAULT_SOURCE_FOLDER);
		this.srcField.setPreferredSize(new Dimension(85, 20));
		projectPanel.add(this.srcField);
		
		projectPanel.add(new JLabel("config:"));
		this.appConfigField = new JTextField(DEFAULT_CONFIG_FOLDER);
		this.appConfigField.setPreferredSize(new Dimension(98, 20));
		projectPanel.add(this.appConfigField);
		
		projectPanel.add(new JLabel("resources:"));
		this.appResourcesField = new JTextField(DEFAULT_RESOURCES_FOLDER);
		this.appResourcesField.setPreferredSize(new Dimension(115, 20));
		projectPanel.add(this.appResourcesField);
		
		projectPanel.add(new JLabel("WebRoot:"));
		this.webRootField = new JTextField(DEFAULT_WEB_ROOT_FOLDER);
		this.webRootField.setPreferredSize(new Dimension(50, 20));
		projectPanel.add(this.webRootField);
		
		projectPanel.add(new JLabel("WebConfig:"));
		this.webConfigField = new JTextField(DEFAULT_WEB_CONFIG_FOLDER);
		this.webConfigField.setPreferredSize(new Dimension(98, 20));
		projectPanel.add(this.webConfigField);
		
		projectPanel.add(new JLabel("WebResources:"));
		this.webResourcesField = new JTextField(DEFAULT_WEB_RESOURCES_FOLDER);
		this.webResourcesField.setPreferredSize(new Dimension(110, 20));
		projectPanel.add(this.webResourcesField);
		
		return projectPanel;
	}
	
	/**
	 * <p>
	 * Title：构造命名法Panel
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JPanel buildNotationPane() {
		JPanel notationPanel = new JPanel();
		notationPanel.setBorder(BorderFactory.createTitledBorder("命名法"));
		notationPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		JRadioButton camelCaseNotationRadio = new JRadioButton("Camel Case");  //驼峰式（java）——小驼峰式命名法（Lower Camel Case）
		JRadioButton pascalNotationRadio = new JRadioButton("Pascal Notation");  //帕斯卡命名法(C#)——大驼峰式命名法（Upper Camel Case）
		JRadioButton underscoreNotationRadio = new JRadioButton("Underscore");  //下划线驼峰式（C、UNIX）
		JRadioButton hungarianNotationRadio = new JRadioButton("Hungary");  //匈牙利表示法（Window C）
		camelCaseNotationRadio.setSelected(true);
		
		camelCaseNotationRadio.setActionCommand("CamelCase");
		pascalNotationRadio.setActionCommand("PascalNotation");
		underscoreNotationRadio.setActionCommand("Notation");
		hungarianNotationRadio.setActionCommand("Hungarian");
		
		pascalNotationRadio.setEnabled(false);
		underscoreNotationRadio.setEnabled(false);
		hungarianNotationRadio.setEnabled(false);
		
		this.notationButtonGroup = new ButtonGroup();
		this.notationButtonGroup.add(camelCaseNotationRadio);
		this.notationButtonGroup.add(pascalNotationRadio);
		this.notationButtonGroup.add(underscoreNotationRadio);
		this.notationButtonGroup.add(hungarianNotationRadio);
		
		notationPanel.add(camelCaseNotationRadio);
		notationPanel.add(pascalNotationRadio);
		notationPanel.add(underscoreNotationRadio);
		notationPanel.add(hungarianNotationRadio);
		
		return notationPanel;
	}
	
	/**
	 * <p>
	 * Title：代码个性化设置
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JPanel buildCodeSpecialPane() {
		JPanel specialPanel = new JPanel();
		specialPanel.setBorder(BorderFactory.createTitledBorder("个性化设置"));
		specialPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		JLabel packagePrefixLabel = new JLabel("应用包:");
		packagePrefixLabel.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "package.png"));
		specialPanel.add(packagePrefixLabel);
		this.packagePrefixField = new JTextField(DEFAULT_APP_PACKAGE);
		this.packagePrefixField.setPreferredSize(new Dimension(120, 20));
		specialPanel.add(this.packagePrefixField);

		JLabel subsystemLabel = new JLabel("子系统:");
		subsystemLabel.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "application_cascade.png"));
		specialPanel.add(subsystemLabel);
		this.subsystemField = new JTextField(DEFAULT_SUBSYSTEM_PACKAGE);
		this.subsystemField.setPreferredSize(new Dimension(60, 20));
		specialPanel.add(this.subsystemField);
		
		JLabel moduleLabel = new JLabel("模块:");
		moduleLabel.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "blockdevice.png"));
		specialPanel.add(moduleLabel);
		this.moduleField = new JTextField(DEFAULT_MODULE_PACKAGE);
		this.moduleField.setPreferredSize(new Dimension(60, 20));
		specialPanel.add(this.moduleField);

		JLabel javaModelLabel = new JLabel("Java模型:");
		javaModelLabel.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "java.png"));
		specialPanel.add(javaModelLabel);
		this.javaModelNameField = new JTextField();
		this.javaModelNameField.setPreferredSize(new Dimension(60, 20));
		specialPanel.add(this.javaModelNameField);
		
		this.actionSuffer = new JTextField(ACTION_SUFFER);
		this.actionFormSuffer = new JTextField(ACTION_FORM_SUFFER);
		this.serviceSuffer = new JTextField(SERVICE_SUFFER);
		this.serviceImplSuffer = new JTextField(SERVICE_IMPL_SUFFER);
		this.daoSuffer = new JTextField(DAO_SUFFER);
		this.daoImplSuffer = new JTextField(DAO_IMPL_SUFFER);
		this.metadataSuffer = new JTextField(METADATA_SUFFER);
		
		this.queryPrefix = new JTextField(QUERY_PREFIX); 
		this.createPrefix = new JTextField(CREATE_PREFIX);
		this.editPrefix = new JTextField(EDIT_PREFIX);
		this.viewPrefix = new JTextField(VIEW_PREFIX);
		this.gridSuffer = new JTextField(GRID_PAGE_SUFFER);
		this.treeSuffer = new JTextField(TREE_PAGE_SUFFER);
		this.windowSuffer = new JTextField(WINDOW_SUFFER);
		this.panelSuffer = new JTextField(PANEL_SUFFER);
		this.gridPanelSuffer = new JTextField(GRID_PANEL_SUFFER);
		this.treePanelSuffer = new JTextField(TREE_PANEL_SUFFER);
		
		specialPanel.add(new JLabel("Action后缀:"));
		this.actionSuffer.setPreferredSize(new Dimension(45, 20));
//		this.actionSuffer.setEnabled(false);
		specialPanel.add(this.actionSuffer);
		
		specialPanel.add(new JLabel("Service后缀:"));
		this.serviceSuffer.setPreferredSize(new Dimension(50, 20));
		specialPanel.add(this.serviceSuffer);
		
		specialPanel.add(new JLabel("ServiceImpl后缀:"));
		this.serviceImplSuffer.setPreferredSize(new Dimension(75, 20));
		specialPanel.add(this.serviceImplSuffer);
		
		specialPanel.add(new JLabel("Dao后缀:"));
		this.daoSuffer.setPreferredSize(new Dimension(30, 20));
		specialPanel.add(this.daoSuffer);
		
		specialPanel.add(new JLabel("DaoImpl后缀:"));
		this.daoImplSuffer.setPreferredSize(new Dimension(75, 20));
		specialPanel.add(this.daoImplSuffer);
		
		/*
		specialPanel.add(new JLabel("Metadata后缀:"));
		this.metadataSuffer.setPreferredSize(new Dimension(50, 20));
		specialPanel.add(this.metadataSuffer);
		
		specialPanel.add(new JLabel("创建页面前缀:"));
		this.createPagePrefix.setPreferredSize(new Dimension(50, 20));
		specialPanel.add(this.createPrefix);
		
		specialPanel.add(new JLabel("修改页面前缀:"));
		this.editPrefix.setPreferredSize(new Dimension(50, 20));
		specialPanel.add(this.editPrefix);
		
		specialPanel.add(new JLabel("查看页面前缀:"));
		this.viewPrefix.setPreferredSize(new Dimension(50, 20));
		specialPanel.add(this.viewPrefix);
		
		specialPanel.add(new JLabel("Grid页面后缀:"));
		this.gridSuffer.setPreferredSize(new Dimension(50, 20));
		specialPanel.add(this.gridSuffer);
		
		specialPanel.add(new JLabel("窗口后缀:"));
		this.windowSuffer.setPreferredSize(new Dimension(50, 20));
		specialPanel.add(this.windowSuffer);
		
		specialPanel.add(new JLabel("面板后缀:"));
		this.panelSuffer.setPreferredSize(new Dimension(50, 20));
		specialPanel.add(this.panelSuffer);
		*/
		
		return specialPanel;
	}

	/**
	 * <p>
	 * Title：构造代码生成选项Panel
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JPanel buildCodeGenerateOptionPane() {
		JPanel optionPanel = new JPanel();
		optionPanel.setBorder(BorderFactory.createTitledBorder("代码生成选项"));
		optionPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		this.viewCodeGenerateCheckBox = new JCheckBox("生成视图代码");
		this.viewCodeGenerateCheckBox.setSelected(true);
		optionPanel.add(this.viewCodeGenerateCheckBox);
		
		this.controllerCodeGenerateCheckBox = new JCheckBox("生成控制器(Action)代码");
		this.controllerCodeGenerateCheckBox.setSelected(true);
		optionPanel.add(this.controllerCodeGenerateCheckBox);
		
		this.appCodeGenerateCheckBox = new JCheckBox("生成业务层(Service)代码");
		this.appCodeGenerateCheckBox.setSelected(true);
		optionPanel.add(this.appCodeGenerateCheckBox);
		
		this.persistenceCodeGenerateCheckBox = new JCheckBox("生成持久层(Dao)代码");
		this.persistenceCodeGenerateCheckBox.setSelected(true);
		optionPanel.add(this.persistenceCodeGenerateCheckBox);

		this.riaCodeGenerateCheckBox = new JCheckBox("生成RIA代码");
		this.riaCodeGenerateCheckBox.setSelected(true);
		optionPanel.add(this.riaCodeGenerateCheckBox);
		
		optionPanel.add(new JLabel("界面风格:"));
		this.pageStyle = new JTextField();
		this.pageStyle.setPreferredSize(new Dimension(80, 20));
		this.pageStyle.setEnabled(false);
		optionPanel.add(this.pageStyle);
		
		this.pageStyleSelectBtn = new JButton();
		this.pageStyleSelectBtn.setText("选择...");
		this.pageStyleSelectBtn.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "theme.png"));
		optionPanel.add(this.pageStyleSelectBtn);
		
		this.codeGenerateBtn = new JButton(new GenerateAdapter(this));
		this.codeGenerateBtn.setText("生成代码");
		this.codeGenerateBtn.setIcon(IconUtils.createImageIcon(ICON_CLASS_PATH + "disk_black.png"));
		this.codeGenerateBtn.setActionCommand(GenerateAdapter.GENERATE_CODE_COMMAND);
		optionPanel.add(this.codeGenerateBtn);

		return optionPanel;
	}
	
	/**
	 * <p>
	 * Title：构造Java代码生成器Panel
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JScrollPane buildJGeneratorPanel() {
		JPanel jgeneratorPanel = new JPanel();
		jgeneratorPanel.setLayout(new GridLayout(7, 1));
		JScrollPane jgeneratorScrollPane = new JScrollPane(jgeneratorPanel);
		jgeneratorScrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
		
		jgeneratorPanel.add(buildMetadataInfoPane());
		jgeneratorPanel.add(buildJ2eeSpecificationLevelPane());
		jgeneratorPanel.add(buildFrameworkPane());
		jgeneratorPanel.add(buildProjectPane());
		jgeneratorPanel.add(buildNotationPane());
		jgeneratorPanel.add(buildCodeSpecialPane());
		jgeneratorPanel.add(buildCodeGenerateOptionPane());

		return jgeneratorScrollPane;
	}
	
	/**
	 * <p>
	 * Title：构造代码预览Panel
	 * </p>
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JScrollPane buildCodePreviewPanel() {
		JTextArea textArea = new JTextArea("public class ClassName {\n\n}\n");
		//通过设置textArea的列和行来设置对话框显示内容的大小
		textArea.setColumns(100);
		textArea.setRows(10);
//		textArea.setLineWrap(true);//超过设置的列数自动换行
		textArea.setLineWrap(false);
		textArea.setEditable(false);//设置不可编辑
		
		JScrollPane codePreviewScrollPane = new JScrollPane(textArea);
		codePreviewScrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));

		return codePreviewScrollPane;
	}

	/**
	 * <p>
	 * Title：构造中间JPanel
	 * </p>
	 * 
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JSplitPane buildCenterPane() {
		/*
		 * 表格JScrollPane
		 */
		this.metadataTable = new MetadataTable(this);
		JScrollPane metadataTableScrollPane = new JScrollPane(this.metadataTable);
		
		/*
		 * 代码生成器JTabbedPane
		 */
		JTabbedPane tabbedPane = new JTabbedPane();
		tabbedPane.addTab("JGenerator", IconUtils.createImageIcon(ICON_CLASS_PATH + "text_x_java.png"), buildJGeneratorPanel(), "代码生成器");
		tabbedPane.addTab("PHP Generator", IconUtils.createImageIcon(ICON_CLASS_PATH + "application_x_php.png"), new JLabel("PHP代码生成器，开发中..."), "PHP代码生成器");
		tabbedPane.addTab("ASP.Net Generator", IconUtils.createImageIcon(ICON_CLASS_PATH + "filetype_asp.png"), new JLabel("ASP.Net代码生成器，开发中..."), "ASP.Net代码生成器");
		tabbedPane.addTab("C# Generator", IconUtils.createImageIcon(ICON_CLASS_PATH + "text_x_csharp.png"), new JLabel("C#代码生成器，开发中..."), "C#代码生成器");
		tabbedPane.addTab("Code Preview", IconUtils.createImageIcon(ICON_CLASS_PATH + "view_source.png"), buildCodePreviewPanel(), "代码预览");
		
		JSplitPane centerSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, metadataTableScrollPane, tabbedPane);
		centerSplitPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
		centerSplitPane.setDividerLocation(160);
		centerSplitPane.setDividerSize(5);  //分隔线的宽度
		centerSplitPane.setOneTouchExpandable(true);
		
		return centerSplitPane;
	}
	
	/**
	 * <p>
	 * Title：构造SouthPanel
	 * </p>
	 * 
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 * @return
	 */
	private JPanel buildSouthPane() {
		JPanel southPanel = new JPanel();
		southPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		southPanel.add(new JLabel("状态："));
		this.statusLabel = new JLabel();
		southPanel.add(this.statusLabel);
		
		return southPanel;
	}

	/**
	 * <p>
	 * Title：buildContentPane
	 * </p>
	 * 
	 * @return
	 * @author <a href="mailto:shushanlee@msn.com">liss</a>
	 */
	private JPanel buildContentPane() {
		JPanel contentPanel = new JPanel();
		contentPanel.setLayout(new BorderLayout());

		contentPanel.add(buildNorthPane(), BorderLayout.NORTH);
		contentPanel.add(buildCenterPane(), BorderLayout.CENTER);
		contentPanel.add(buildSouthPane(), BorderLayout.SOUTH);

		return contentPanel;
	}

	/**
	 * @return the appCodeGenerateCheckBox
	 */
	public JCheckBox getAppCodeGenerateCheckBox() {
		return this.appCodeGenerateCheckBox;
	}

	/**
	 * @return the appConfigField
	 */
	public JTextField getAppConfigField() {
		return this.appConfigField;
	}

	/**
	 * @return the appFrameworkComboBox
	 */
	public JComboBox getAppFrameworkComboBox() {
		return this.appFrameworkComboBox;
	}

	/**
	 * @return the appResourcesField
	 */
	public JTextField getAppResourcesField() {
		return this.appResourcesField;
	}

	/**
	 * @return the javaModelNameField
	 */
	public JTextField getJavaModelNameField() {
		return this.javaModelNameField;
	}

	/**
	 * @return the codeGenerateBtn
	 */
	public JButton getCodeGenerateBtn() {
		return this.codeGenerateBtn;
	}

	/**
	 * @return the filterColumnNamePrefixField
	 */
	public JTextField getFilterColumnNamePrefixField() {
		return this.filterColumnNamePrefixField;
	}

	/**
	 * @return the controllerCodeGenerateCheckBox
	 */
	public JCheckBox getControllerCodeGenerateCheckBox() {
		return this.controllerCodeGenerateCheckBox;
	}

	/**
	 * @return the dataSourceComboBox
	 */
	public JComboBox getDataSourceComboBox() {
		return this.dataSourceComboBox;
	}

	/**
	 * @return the dataSourceManagerBtn
	 */
	public JButton getDataSourceManagerBtn() {
		return this.dataSourceManagerBtn;
	}

	/**
	 * @return the encodingComboBox
	 */
	public JComboBox getEncodingComboBox() {
		return this.encodingComboBox;
	}

	/**
	 * @return the j2eeSpecificationLevelButtonGroup
	 */
	public ButtonGroup getJ2eeSpecificationLevelButtonGroup() {
		return this.j2eeSpecificationLevelButtonGroup;
	}

	/**
	 * @return the metadataFileBtn
	 */
	public JButton getMetadataFileBtn() {
		return this.metadataFileBtn;
	}

	/**
	 * @return the metadataService
	 */
	public MetadataService getMetadataService() {
		return this.metadataService;
	}

	/**
	 * @return the metadataTable
	 */
	public MetadataTable getMetadataTable() {
		return this.metadataTable;
	}

	/**
	 * @return the modelDescriptionField
	 */
	public JTextField getModelDescriptionField() {
		return this.modelDescriptionField;
	}

	/**
	 * @return the metadataModelNameField
	 */
	public JTextField getMetadataModelNameField() {
		return this.metadataModelNameField;
	}

	/**
	 * @return the subsystemField
	 */
	public JTextField getSubsystemField() {
		return this.subsystemField;
	}

	/**
	 * @return the notationButtonGroup
	 */
	public ButtonGroup getNotationButtonGroup() {
		return this.notationButtonGroup;
	}

	/**
	 * @return the packagePrefixField
	 */
	public JTextField getPackagePrefixField() {
		return this.packagePrefixField;
	}

	/**
	 * @return the pageStyle
	 */
	public JTextField getPageStyle() {
		return this.pageStyle;
	}

	/**
	 * @return the pageStyleSelectBtn
	 */
	public JButton getPageStyleSelectBtn() {
		return this.pageStyleSelectBtn;
	}

	/**
	 * @return the persistenceCodeGenerateCheckBox
	 */
	public JCheckBox getPersistenceCodeGenerateCheckBox() {
		return this.persistenceCodeGenerateCheckBox;
	}

	/**
	 * @return the persistenceFrameworkComboBox
	 */
	public JComboBox getPersistenceFrameworkComboBox() {
		return this.persistenceFrameworkComboBox;
	}

	/**
	 * @return the projectLocationField
	 */
	public JTextField getProjectLocationField() {
		return this.projectLocationField;
	}

	/**
	 * @return the projectLocationSelectBtn
	 */
	public JButton getProjectLocationSelectBtn() {
		return this.projectLocationSelectBtn;
	}

	/**
	 * @return the queryBtn
	 */
	public JButton getQueryBtn() {
		return this.queryBtn;
	}

	/**
	 * @return the riaCodeGenerateCheckBox
	 */
	public JCheckBox getRiaCodeGenerateCheckBox() {
		return this.riaCodeGenerateCheckBox;
	}

	/**
	 * @return the riaComboBox
	 */
	public JComboBox getRiaComboBox() {
		return this.riaComboBox;
	}

	/**
	 * @return the srcField
	 */
	public JTextField getSrcField() {
		return this.srcField;
	}

	/**
	 * @return the tableComboBox
	 */
	public JComboBox getTableComboBox() {
		return this.tableComboBox;
	}

	/**
	 * @return the filterTableNamePrefixField
	 */
	public JTextField getFilterTableNamePrefixField() {
		return this.filterTableNamePrefixField;
	}

	/**
	 * @return the filterTableNameSufferField
	 */
	public JTextField getFilterTableNameSufferField() {
		return this.filterTableNameSufferField;
	}

	/**
	 * @return the viewCodeGenerateCheckBox
	 */
	public JCheckBox getViewCodeGenerateCheckBox() {
		return this.viewCodeGenerateCheckBox;
	}

	/**
	 * @return the webConfigField
	 */
	public JTextField getWebConfigField() {
		return this.webConfigField;
	}

	/**
	 * @return the webFrameworkComboBox
	 */
	public JComboBox getWebFrameworkComboBox() {
		return this.webFrameworkComboBox;
	}

	/**
	 * @return the webResourcesField
	 */
	public JTextField getWebResourcesField() {
		return this.webResourcesField;
	}

	/**
	 * @return the webRootField
	 */
	public JTextField getWebRootField() {
		return this.webRootField;
	}

	/**
	 * @return the viewComboBox
	 */
	public JComboBox getViewComboBox() {
		return this.viewComboBox;
	}

	/**
	 * @param appCodeGenerateCheckBox the appCodeGenerateCheckBox to set
	 */
	public void setAppCodeGenerateCheckBox(JCheckBox appCodeGenerateCheckBox) {
		this.appCodeGenerateCheckBox = appCodeGenerateCheckBox;
	}

	/**
	 * @param appConfigField the appConfigField to set
	 */
	public void setAppConfigField(JTextField appConfigField) {
		this.appConfigField = appConfigField;
	}

	/**
	 * @param appFrameworkComboBox the appFrameworkComboBox to set
	 */
	public void setAppFrameworkComboBox(JComboBox appFrameworkComboBox) {
		this.appFrameworkComboBox = appFrameworkComboBox;
	}

	/**
	 * @param appResourcesField the appResourcesField to set
	 */
	public void setAppResourcesField(JTextField appResourcesField) {
		this.appResourcesField = appResourcesField;
	}

	/**
	 * @param javaModelNameField the javaModelNameField to set
	 */
	public void setJavaModelNameField(JTextField beanNameField) {
		this.javaModelNameField = beanNameField;
	}

	/**
	 * @param codeGenerateBtn the codeGenerateBtn to set
	 */
	public void setCodeGenerateBtn(JButton codeGenerateBtn) {
		this.codeGenerateBtn = codeGenerateBtn;
	}

	/**
	 * @param filterColumnNamePrefixField the filterColumnNamePrefixField to set
	 */
	public void setFilterColumnNamePrefixField(JTextField columnNameFilterPrefixField) {
		this.filterColumnNamePrefixField = columnNameFilterPrefixField;
	}

	/**
	 * @param controllerCodeGenerateCheckBox the controllerCodeGenerateCheckBox to set
	 */
	public void setControllerCodeGenerateCheckBox(JCheckBox controllerCodeGenerateCheckBox) {
		this.controllerCodeGenerateCheckBox = controllerCodeGenerateCheckBox;
	}

	/**
	 * @param dataSourceComboBox the dataSourceComboBox to set
	 */
	public void setDataSourceComboBox(JComboBox datasourceComboBox) {
		this.dataSourceComboBox = datasourceComboBox;
	}

	/**
	 * @param dataSourceManagerBtn the dataSourceManagerBtn to set
	 */
	public void setDataSourceManagerBtn(JButton datasourceManagerBtn) {
		this.dataSourceManagerBtn = datasourceManagerBtn;
	}

	/**
	 * @param encodingComboBox the encodingComboBox to set
	 */
	public void setEncodingComboBox(JComboBox encodingComboBox) {
		this.encodingComboBox = encodingComboBox;
	}

	/**
	 * @param specificationLevelButtonGroup the j2eeSpecificationLevelButtonGroup to set
	 */
	public void setJ2eeSpecificationLevelButtonGroup(ButtonGroup specificationLevelButtonGroup) {
		this.j2eeSpecificationLevelButtonGroup = specificationLevelButtonGroup;
	}

	/**
	 * @param metadataFileBtn the metadataFileBtn to set
	 */
	public void setMetadataFileBtn(JButton metadataFileBtn) {
		this.metadataFileBtn = metadataFileBtn;
	}

	/**
	 * @param metadataService the metadataService to set
	 */
	public void setMetadataService(MetadataService metadataService) {
		this.metadataService = metadataService;
	}

	/**
	 * @param metadataTable the metadataTable to set
	 */
	public void setMetadataTable(MetadataTable metadataTable) {
		this.metadataTable = metadataTable;
	}

	/**
	 * @param modelDescriptionField the modelDescriptionField to set
	 */
	public void setModelDescriptionField(JTextField modelDescriptionField) {
		this.modelDescriptionField = modelDescriptionField;
	}

	/**
	 * @param metadataModelNameField the metadataModelNameField to set
	 */
	public void setMetadataModelNameField(JTextField modelNameField) {
		this.metadataModelNameField = modelNameField;
	}

	/**
	 * @param subsystemField the subsystemField to set
	 */
	public void setSubsystemField(JTextField subsystemField) {
		this.subsystemField = subsystemField;
	}

	/**
	 * @param notationButtonGroup the notationButtonGroup to set
	 */
	public void setNotationButtonGroup(ButtonGroup notationButtonGroup) {
		this.notationButtonGroup = notationButtonGroup;
	}

	/**
	 * @param packagePrefixField the packagePrefixField to set
	 */
	public void setPackagePrefixField(JTextField packagePrefixField) {
		this.packagePrefixField = packagePrefixField;
	}

	/**
	 * @param pageStyle the pageStyle to set
	 */
	public void setPageStyle(JTextField pageStyle) {
		this.pageStyle = pageStyle;
	}

	/**
	 * @param pageStyleSelectBtn the pageStyleSelectBtn to set
	 */
	public void setPageStyleSelectBtn(JButton pageStyleSelectBtn) {
		this.pageStyleSelectBtn = pageStyleSelectBtn;
	}

	/**
	 * @param persistenceCodeGenerateCheckBox the persistenceCodeGenerateCheckBox to set
	 */
	public void setPersistenceCodeGenerateCheckBox(JCheckBox persistenceCodeGenerateCheckBox) {
		this.persistenceCodeGenerateCheckBox = persistenceCodeGenerateCheckBox;
	}

	/**
	 * @param persistenceFrameworkComboBox the persistenceFrameworkComboBox to set
	 */
	public void setPersistenceFrameworkComboBox(JComboBox persistenceFrameworkComboBox) {
		this.persistenceFrameworkComboBox = persistenceFrameworkComboBox;
	}

	/**
	 * @param projectLocationField the projectLocationField to set
	 */
	public void setProjectLocationField(JTextField projectLocationField) {
		this.projectLocationField = projectLocationField;
	}

	/**
	 * @param projectLocationSelectBtn the projectLocationSelectBtn to set
	 */
	public void setProjectLocationSelectBtn(JButton projectLocationSelectBtn) {
		this.projectLocationSelectBtn = projectLocationSelectBtn;
	}

	/**
	 * @param queryBtn the queryBtn to set
	 */
	public void setQueryBtn(JButton queryBtn) {
		this.queryBtn = queryBtn;
	}

	/**
	 * @param riaCodeGenerateCheckBox the riaCodeGenerateCheckBox to set
	 */
	public void setRiaCodeGenerateCheckBox(JCheckBox riaCodeGenerateCheckBox) {
		this.riaCodeGenerateCheckBox = riaCodeGenerateCheckBox;
	}

	/**
	 * @param riaComboBox the riaComboBox to set
	 */
	public void setRiaComboBox(JComboBox riaComboBox) {
		this.riaComboBox = riaComboBox;
	}

	/**
	 * @param srcField the srcField to set
	 */
	public void setSrcField(JTextField srcField) {
		this.srcField = srcField;
	}

	/**
	 * @param tableComboBox the tableComboBox to set
	 */
	public void setTableComboBox(JComboBox tableComboBox) {
		this.tableComboBox = tableComboBox;
	}

	/**
	 * @param filterTableNamePrefixField the filterTableNamePrefixField to set
	 */
	public void setFilterTableNamePrefixField(JTextField tableNameFilterPrefixField) {
		this.filterTableNamePrefixField = tableNameFilterPrefixField;
	}

	/**
	 * @param filterTableNameSufferField the filterTableNameSufferField to set
	 */
	public void setFilterTableNameSufferField(JTextField tableNameFilterSufferField) {
		this.filterTableNameSufferField = tableNameFilterSufferField;
	}

	/**
	 * @param viewCodeGenerateCheckBox the viewCodeGenerateCheckBox to set
	 */
	public void setViewCodeGenerateCheckBox(JCheckBox viewCodeGenerateCheckBox) {
		this.viewCodeGenerateCheckBox = viewCodeGenerateCheckBox;
	}

	/**
	 * @param webConfigField the webConfigField to set
	 */
	public void setWebConfigField(JTextField webConfigField) {
		this.webConfigField = webConfigField;
	}

	/**
	 * @param webFrameworkComboBox the webFrameworkComboBox to set
	 */
	public void setWebFrameworkComboBox(JComboBox webFrameworkComboBox) {
		this.webFrameworkComboBox = webFrameworkComboBox;
	}

	/**
	 * @param webResourcesField the webResourcesField to set
	 */
	public void setWebResourcesField(JTextField webResourcesField) {
		this.webResourcesField = webResourcesField;
	}

	/**
	 * @param webRootField the webRootField to set
	 */
	public void setWebRootField(JTextField webRootField) {
		this.webRootField = webRootField;
	}

	/**
	 * @param viewComboBox the viewComboBox to set
	 */
	public void setViewComboBox(JComboBox webViewComboBox) {
		this.viewComboBox = webViewComboBox;
	}

	/**
	 * @return the actionFormSuffer
	 */
	public JTextField getActionFormSuffer() {
		return actionFormSuffer;
	}

	/**
	 * @param actionFormSuffer the actionFormSuffer to set
	 */
	public void setActionFormSuffer(JTextField actionFormSuffer) {
		this.actionFormSuffer = actionFormSuffer;
	}

	/**
	 * @return the actionSuffer
	 */
	public JTextField getActionSuffer() {
		return actionSuffer;
	}

	/**
	 * @param actionSuffer the actionSuffer to set
	 */
	public void setActionSuffer(JTextField actionSuffer) {
		this.actionSuffer = actionSuffer;
	}

	/**
	 * @return the createPrefix
	 */
	public JTextField getCreatePrefix() {
		return createPrefix;
	}

	/**
	 * @param createPrefix the createPrefix to set
	 */
	public void setCreatePrefix(JTextField createPagePrefix) {
		this.createPrefix = createPagePrefix;
	}

	/**
	 * @return the daoImplSuffer
	 */
	public JTextField getDaoImplSuffer() {
		return daoImplSuffer;
	}

	/**
	 * @param daoImplSuffer the daoImplSuffer to set
	 */
	public void setDaoImplSuffer(JTextField daoImplSuffer) {
		this.daoImplSuffer = daoImplSuffer;
	}

	/**
	 * @return the daoSuffer
	 */
	public JTextField getDaoSuffer() {
		return daoSuffer;
	}

	/**
	 * @param daoSuffer the daoSuffer to set
	 */
	public void setDaoSuffer(JTextField daoSuffer) {
		this.daoSuffer = daoSuffer;
	}

	/**
	 * @return the editPrefix
	 */
	public JTextField getEditPrefix() {
		return editPrefix;
	}

	/**
	 * @param editPrefix the editPrefix to set
	 */
	public void setEditPrefix(JTextField editPagePrefix) {
		this.editPrefix = editPagePrefix;
	}

	/**
	 * @return the gridSuffer
	 */
	public JTextField getGridSuffer() {
		return gridSuffer;
	}

	/**
	 * @param gridSuffer the gridSuffer to set
	 */
	public void setGridSuffer(JTextField gridPageSuffer) {
		this.gridSuffer = gridPageSuffer;
	}

	/**
	 * @return the metadataSuffer
	 */
	public JTextField getMetadataSuffer() {
		return metadataSuffer;
	}

	/**
	 * @param metadataSuffer the metadataSuffer to set
	 */
	public void setMetadataSuffer(JTextField metadataSuffer) {
		this.metadataSuffer = metadataSuffer;
	}

	/**
	 * @return the gridPanelSuffer
	 */
	public JTextField getGridPanelSuffer() {
		return gridPanelSuffer;
	}

	/**
	 * @param gridPanelSuffer the gridPanelSuffer to set
	 */
	public void setGridPanelSuffer(JTextField panelSuffer) {
		this.gridPanelSuffer = panelSuffer;
	}

	/**
	 * @return the serviceImplSuffer
	 */
	public JTextField getServiceImplSuffer() {
		return serviceImplSuffer;
	}

	/**
	 * @param serviceImplSuffer the serviceImplSuffer to set
	 */
	public void setServiceImplSuffer(JTextField serviceImplSuffer) {
		this.serviceImplSuffer = serviceImplSuffer;
	}

	/**
	 * @return the serviceSuffer
	 */
	public JTextField getServiceSuffer() {
		return serviceSuffer;
	}

	/**
	 * @param serviceSuffer the serviceSuffer to set
	 */
	public void setServiceSuffer(JTextField serviceSuffer) {
		this.serviceSuffer = serviceSuffer;
	}

	/**
	 * @return the treeSuffer
	 */
	public JTextField getTreeSuffer() {
		return treeSuffer;
	}

	/**
	 * @param treeSuffer the treeSuffer to set
	 */
	public void setTreeSuffer(JTextField treePageSuffer) {
		this.treeSuffer = treePageSuffer;
	}

	/**
	 * @return the viewPrefix
	 */
	public JTextField getViewPrefix() {
		return viewPrefix;
	}

	/**
	 * @param viewPrefix the viewPrefix to set
	 */
	public void setViewPrefix(JTextField viewPagePrefix) {
		this.viewPrefix = viewPagePrefix;
	}

	/**
	 * @return the windowSuffer
	 */
	public JTextField getWindowSuffer() {
		return windowSuffer;
	}

	/**
	 * @param windowSuffer the windowSuffer to set
	 */
	public void setWindowSuffer(JTextField windowSuffer) {
		this.windowSuffer = windowSuffer;
	}

	/**
	 * @return the panelSuffer
	 */
	public JTextField getPanelSuffer() {
		return this.panelSuffer;
	}

	/**
	 * @return the queryPrefix
	 */
	public JTextField getQueryPrefix() {
		return this.queryPrefix;
	}

	/**
	 * @return the treePanelSuffer
	 */
	public JTextField getTreePanelSuffer() {
		return this.treePanelSuffer;
	}

	/**
	 * @param panelSuffer the panelSuffer to set
	 */
	public void setPanelSuffer(JTextField panelSuffer) {
		this.panelSuffer = panelSuffer;
	}

	/**
	 * @param queryPrefix the queryPrefix to set
	 */
	public void setQueryPrefix(JTextField queryPrefix) {
		this.queryPrefix = queryPrefix;
	}

	/**
	 * @param treePanelSuffer the treePanelSuffer to set
	 */
	public void setTreePanelSuffer(JTextField treePanelSuffer) {
		this.treePanelSuffer = treePanelSuffer;
	}

	/**
	 * @return the statusLabel
	 */
	public JLabel getStatusLabel() {
		return this.statusLabel;
	}

	/**
	 * @param statusLabel the statusLabel to set
	 */
	public void setStatusLabel(JLabel statusLabel) {
		this.statusLabel = statusLabel;
	}

	/**
	 * @return the moduleField
	 */
	public JTextField getModuleField() {
		return moduleField;
	}

	/**
	 * @param moduleField the moduleField to set
	 */
	public void setModuleField(JTextField moduleField) {
		this.moduleField = moduleField;
	}
	
}
